package com.telcordia.cvas.rpn;

public class RpnCalculator {
	private OperandStack values = new OperandStack();

	public int getXRegister() {
		return values.peek();
	}

	public void setXRegister(int value) {
		values.replaceTop(value);
	}

	public void enter() {
		values.push(getXRegister());
	}

	public void perform(String operatorName) {
		Operator op = findOperatorNamed(operatorName);
		
		op.execute(values);
	}

	private Operator findOperatorNamed(String operatorName) {
		Operator op = null;
		
		if ("+".equals(operatorName))
			op = new Add();
		else if ("-".equals(operatorName))
			op = new Subtract();
		else if ("!".equals(operatorName))
			op = new Factorial();
		else
			throw new RuntimeException(operatorName + " not registered");
		return op;
	}

}
